﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Domain.Entitys
{
    /// <summary>
    /// 记录人力资源档案所做的任何更改表
    /// </summary>
    public class HFD
    {
        /// <summary>
        /// 唯一标识符，作为主键且为自动增长列，用于在系统中唯一确定该员工档案记录，类型为整数。
        /// </summary>
        public int? HfdId { get; set; }

        /// <summary>
        /// 档案编号，用于唯一标识不同员工的档案，方便进行档案相关的查询、关联以及管理操作，类型为字符串（可根据实际编号格式调整具体类型）。
        /// </summary>
        public string? HumanId { get; set; }

        /// <summary>
        /// 一级机构编号，用于关联员工所在的一级机构，便于进行组织架构层面的管理与统计等操作，类型为字符串（具体类型依实际情况而定）。
        /// </summary>
        public string? FirstKindId { get; set; }

        /// <summary>
        /// 一级机构名称，直观展示员工所属的一级机构具体称呼，方便用户识别与理解，类型为字符串。
        /// </summary>
        public string? FirstKindName { get; set; }

        /// <summary>
        /// 二级机构编号，进一步明确员工所在的二级机构，使其能与一级机构及其他模块准确关联，类型为字符串（具体类型依实际情况而定）。
        /// </summary>
        public string? SecondKindId { get; set; }

        /// <summary>
        /// 二级机构名称，便于清晰呈现员工所属二级机构的具体称谓，有助于用户区分不同机构层级下的员工，类型为字符串。
        /// </summary>
        public string? SecondKindName { get; set; }

        /// <summary>
        /// 三级机构编号，用于精准定位员工所在的三级机构，方便在系统内进行更细致的机构相关操作及数据关联，类型为字符串（具体类型可按实际编号规则确定）。
        /// </summary>
        public string? ThirdKindId { get; set; }

        /// <summary>
        /// 三级机构名称，清晰展示员工所在三级机构的具体名称，类型为字符串。
        /// </summary>
        public string? ThirdKindName { get; set; }

        /// <summary>
        /// 姓名，用于记录员工的个人姓名信息，类型为字符串。
        /// </summary>
        public string? HumanName { get; set; }

        /// <summary>
        /// 地址，记录员工的居住或联系地址，类型为字符串。
        /// </summary>
        public string? HumanAddress { get; set; }

        /// <summary>
        /// 邮政编码，对应员工地址相关的邮政编码信息，方便邮件等通信联络，类型为字符串。
        /// </summary>
        public string? HumanPostcode { get; set; }

        /// <summary>
        /// 职称，体现员工在专业技术领域的资格认定情况，类型为字符串。
        /// </summary>
        public string? HumanProDesignation { get; set; }

        /// <summary>
        /// 职位分类编号，用于区分不同的职位分类，便于在系统内进行职位相关的识别、关联以及业务操作，类型为字符串（可根据实际编号格式调整具体类型）。
        /// </summary>
        public string? HumanMajorKindId { get; set; }

        /// <summary>
        /// 职位分类名称，直观展示该职位分类的具体称呼，便于用户识别和理解，类型为字符串。
        /// </summary>
        public string HumanMajorKindName { get; set; }

        /// <summary>
        /// 职位编号，用于唯一标识不同的职位，方便进行职位相关的各种操作及数据关联，类型为字符串（具体类型可按实际编号规则确定）。
        /// </summary>
        public string HumanMajorId { get; set; }

        /// <summary>
        /// 职位名称，便于清晰呈现职位的具体称谓，有助于用户区分不同职位，类型为字符串。
        /// </summary>
        public string HunmaMajorName { get; set; }

        /// <summary>
        /// 电话，记录员工的固定电话号码，类型为字符串。
        /// </summary>
        public string HumanTelephone { get; set; }

        /// <summary>
        /// 手机号码，用于员工的移动通讯联系方式，类型为字符串。
        /// </summary>
        public string HumanMobilephone { get; set; }

        /// <summary>
        /// 开户银行，指明员工工资等款项的开户银行信息，类型为字符串。
        /// </summary>
        public string HumanBank { get; set; }

        /// <summary>
        /// 银行帐号，对应员工在开户银行的具体账号，用于资金往来等操作，类型为字符串。
        /// </summary>
        public string HumanAccount { get; set; }

        /// <summary>
        /// QQ号码，作为员工的一种网络社交联系方式，类型为字符串。
        /// </summary>
        public string HumanQQ { get; set; }

        /// <summary>
        /// 电子邮件，用于员工的电子通信联系方式，类型为字符串。
        /// </summary>
        public string HumanEmail { get; set; }

        /// <summary>
        /// 爱好，记录员工个人的兴趣爱好情况，类型为字符串。
        /// </summary>
        public string HumanHobby { get; set; }

        /// <summary>
        /// 特长，体现员工在某些方面具备的特殊技能或优势，类型为字符串。
        /// </summary>
        public string HumanSpeciality { get; set; }

        /// <summary>
        /// 性别，用于区分员工的生理性别，类型为字符串（通常可设定固定取值如"男"、"女"等）。
        /// </summary>
        public string HumanSex { get; set; }

        /// <summary>
        /// 宗教信仰，记录员工个人的宗教信仰情况，类型为字符串。
        /// </summary>
        public string HumanReligion { get; set; }

        /// <summary>
        /// 政治面貌，体现员工在政治方面的所属身份，如党员、群众等，类型为字符串。
        /// </summary>
        public string HumanParty { get; set; }

        /// <summary>
        /// 国籍，明确员工所属的国家，类型为字符串。
        /// </summary>
        public string HumanNationality { get; set; }

        /// <summary>
        /// 民族，记录员工所属的民族类别，类型为字符串。
        /// </summary>
        public string HumanRace { get; set; }

        /// <summary>
        /// 出生日期，用于记录员工的出生时间信息，类型为DateTime（方便进行日期相关的计算和处理）。
        /// </summary>
        public DateTime HumanBirthday { get; set; }

        /// <summary>
        /// 出生地，指明员工出生的地点，类型为字符串。
        /// </summary>
        public string HumanBirthplace { get; set; }

        /// <summary>
        /// 年龄，可根据出生日期等信息计算得出，也可手动录入，类型为整数。
        /// </summary>
        public int HumanAge { get; set; }

        /// <summary>
        /// 学历，记录员工所获得的教育程度，如本科、硕士等，类型为字符串。
        /// </summary>
        public string HumanEducatedDegree { get; set; }

        /// <summary>
        /// 教育年限，体现员工接受教育的时长，类型为整数。
        /// </summary>
        public int HumanEducatedYears { get; set; }

        /// <summary>
        /// 学历专业，明确员工所学的专业方向，类型为字符串。
        /// </summary>
        public string HumanEducatedMajor { get; set; }

        /// <summary>
        /// 社会保障号，用于员工在社会保障相关事务中的唯一标识，类型为字符串。
        /// </summary>
        public string HumanSocietySecurityId { get; set; }

        /// <summary>
        /// 身份证号，作为员工的重要身份识别号码，唯一且具有法定性，类型为字符串。
        /// </summary>
        public string HumanIdCard { get; set; }

        /// <summary>
        /// 备注，用于添加一些关于员工档案的额外说明或特殊情况记录，类型为字符串。
        /// </summary>
        public string Remark { get; set; }

        /// <summary>
        /// 薪酬标准编号，用于关联员工对应的薪酬标准，便于薪酬核算等操作，类型为字符串（可根据实际编号格式调整具体类型）。
        /// </summary>
        public string SalaryStandardId { get; set; }

        /// <summary>
        /// 薪酬标准名称，直观展示该薪酬标准的具体称呼，便于用户识别和理解，类型为字符串。
        /// </summary>
        public string SalaryStandardName { get; set; }

        /// <summary>
        /// 基本薪酬总额，记录员工的基本工资数额，类型为 decimal（用于精确的金额计算）。
        /// </summary>
        public decimal SalarySum { get; set; }

        /// <summary>
        /// 应发薪酬总额，包含基本工资、各类津贴等应发放给员工的全部薪酬数额，类型为 decimal。
        /// </summary>
        public decimal DemandSalaraySum { get; set; }

        /// <summary>
        /// 实发薪酬总额，考虑扣除社保、税费等后实际发放到员工手中的薪酬数额，类型为 decimal。
        /// </summary>
        public decimal PaidSalarySum { get; set; }

        /// <summary>
        /// 调动次数，统计员工在公司内职位调动等的次数，类型为整数。
        /// </summary>
        public int MajorChangeAmount { get; set; }

        /// <summary>
        /// 激励累计次数，记录员工获得各类激励（如奖金、荣誉等）的累计次数，类型为整数。
        /// </summary>
        public int BonusAmount { get; set; }

        /// <summary>
        /// 培训累计次数，体现员工参加公司组织的各类培训的累计次数，类型为整数。
        /// </summary>
        public int? TrainingAmount { get; set; }

        /// <summary>
        /// 档案变更累计次数，统计员工档案信息被修改的累计次数，类型为整数。
        /// </summary>
        public int? FileChangAmount { get; set; }

        /// <summary>
        /// 简历，详细记录员工的工作经历、教育背景等信息，类型为字符串（通常可能存储较长篇幅的文本内容）。
        /// </summary>
        public string? HumanHistroyRecords { get; set; }

        /// <summary>
        /// 家庭关系，描述员工的家庭成员及相互之间的关系情况，类型为字符串。
        /// </summary>
        public string? HumanFamilyMembership { get; set; }

        /// <summary>
        /// 相片，可存储员工的照片信息（存储方式可能根据实际系统采用二进制等形式），类型为 byte[]（字节数组形式，用于存储图片数据等）。
        /// </summary>
        public byte[]? HumanPicture { get; set; }

        /// <summary>
        /// 附件名称，若员工档案有相关附件，用于记录附件的名称，类型为字符串。
        /// </summary>
        public string? AttachmentName { get; set; }

        /// <summary>
        /// 复核状态，用于标记档案当前是否经过复核以及复核的结果情况等，类型为字符串（可设定如"已复核"、"待复核"等取值）。
        /// </summary>
        public string? CheckStatus { get; set; }

        /// <summary>
        /// 档案登记人，记录最初录入该员工档案信息的人员姓名或编号等，类型为字符串。
        /// </summary>
        public string? Register { get; set; }

        /// <summary>
        /// 档案复核人，明确负责对员工档案进行复核的人员相关信息，类型为字符串。
        /// </summary>
        public string? Checker { get; set; }

        /// <summary>
        /// 档案变更人，记录对员工档案信息进行修改操作的人员情况，类型为字符串。
        /// </summary>
        public string? Changer { get; set; }

        /// <summary>
        /// 档案登记时间，记录员工档案最初被录入系统的时间，类型为DateTime。
        /// </summary>
        public DateTime? RegistTime { get; set; }

        /// <summary>
        /// 档案复核时间，对应档案复核操作完成的时间点，类型为DateTime。
        /// </summary>
        public DateTime? CheckTime { get; set; }

        /// <summary>
        /// 档案变更时间，记录每次档案信息修改的具体时间，类型为DateTime。
        /// </summary>
        public DateTime? ChangeTime { get; set; }

        /// <summary>
        /// 档案最近更改时间，用于快速知晓档案最后一次被修改的时间，类型为DateTime。
        /// </summary>
        public DateTime? LastlyChangeTime { get; set; }

        /// <summary>
        /// 档案删除时间，若档案被删除，记录该操作执行的时间，类型为DateTime。
        /// </summary>
        public DateTime? DeleteTime { get; set; }

        /// <summary>
        /// 档案恢复时间，若档案曾被删除后又恢复，记录恢复操作对应的时间，类型为DateTime。
        /// </summary>
        public DateTime? RecoveryTime { get; set; }

        /// <summary>
        /// 档案状态，用于标识档案当前的整体状态，如"正常"、"停用"等，类型为字符串。
        /// </summary>
        public string? HumanFileStatus { get; set; }
    }
}
